package com.ds.service;

import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.ds.orm.mapper.RolePermissionDao;
import com.ds.orm.model.Permission;

/**
 * @author du
 *
 */
@Service
@CacheConfig(cacheNames = "sysAuthorize")
public class SysAuthorizeService {
	@Autowired
	private RolePermissionDao rolePermissionDao;
	@Autowired
	private UserService userService;
	@Autowired
	PermissionService permissionService;
	@Autowired
	RoleService roleService;
	@Autowired
	UserRoleService userRoleService;
	@Autowired
	RolePermissionService rolePermissionService;

	// @Transactional
	// @CacheEvict(value = { "getAuthorize", "sysPermission" }, allEntries = true)
	// public void updateUserRole(List<SysUserMenu> sysUserMenus) {
	// Long userId = null;
	// for (SysUserMenu sysUserMenu : sysUserMenus) {
	// if (sysUserMenu.getUserId() != null &&
	// "read".equals(sysUserMenu.getPermission())) {
	// userId = sysUserMenu.getUserId();
	// }
	// }
	// if (userId != null) {
	// sysAuthorizeMapper.deleteUserMenu(userId, "read");
	// }
	// for (SysUserMenu sysUserMenu : sysUserMenus) {
	// if (sysUserMenu.getUserId() != null && sysUserMenu.getMenuId() != null
	// && "read".equals(sysUserMenu.getPermission())) {
	// sysUserMenuMapper.insert(sysUserMenu);
	// }
	// }
	// }
	//
	// @Transactional
	// @CacheEvict(value = { "getAuthorize", "sysPermission" }, allEntries = true)
	// public void updateRolePermission(List<SysUserMenu> sysUserMenus) {
	// Long userId = null;
	// String permission = null;
	// for (SysUserMenu sysUserMenu : sysUserMenus) {
	// if (sysUserMenu.getUserId() != null &&
	// !"read".equals(sysUserMenu.getPermission())) {
	// userId = sysUserMenu.getUserId();
	// permission = sysUserMenu.getPermission();
	// }
	// }
	// if (userId != null && DataUtil.isNotEmpty(permission)) {
	// sysAuthorizeMapper.deleteUserMenu(userId, permission);
	// }
	// for (SysUserMenu sysUserMenu : sysUserMenus) {
	// if (sysUserMenu.getUserId() != null && sysUserMenu.getMenuId() != null
	// && !"read".equals(sysUserMenu.getPermission())) {
	// sysUserMenuMapper.insert(sysUserMenu);
	// }
	// }
	// }
	//
	// @Transactional
	// @CacheEvict(value = { "getAuthorize", "sysPermission" }, allEntries = true)
	// public void updateRolePermission(List<SysRoleMenu> sysRoleMenus) {
	// Long roleId = null;
	// String permission = null;
	// for (SysRoleMenu sysRoleMenu : sysRoleMenus) {
	// if (sysRoleMenu.getRoleId() != null &&
	// !"read".equals(sysRoleMenu.getPermission())) {
	// roleId = sysRoleMenu.getRoleId();
	// permission = sysRoleMenu.getPermission();
	// break;
	// }
	// }
	// if (roleId != null && DataUtil.isNotEmpty(permission)) {
	// sysAuthorizeMapper.deleteRoleMenu(roleId, permission);
	// }
	// for (SysRoleMenu sysRoleMenu : sysRoleMenus) {
	// if (sysRoleMenu.getRoleId() != null && sysRoleMenu.getMenuId() != null
	// && !"read".equals(sysRoleMenu.getPermission())) {
	// sysRoleMenuMapper.insert(sysRoleMenu);
	// }
	// }
	// }

	@Cacheable("sysRole")
	public Set<String> getRoleTypesByUserId(Long userId) {
		return roleService.getRoleTypesByUserId(userId);
	}

	@Cacheable("sysPermission")
	public Set<Permission> queryPermissionsByUserId(Long userId) {
		return permissionService.queryPermissionByUserId(userId);
	}
}
